Many important application domains such as data clustering, social networking, in-memory databases, and machine learning perform a large amount of “pointer chasing” in their code, while traversing pointer-based data structures such as graphs and trees. In general, pointer chasing refers to the operation of accessing multiple memory locations where each access to a new memory location holds a pointer to the next one. This prevents the second access from proceeding until the first access is complete. Pointer chasing affects performance because memory reads are, in effect, serialized in the compute nodes. That is, a read (for example a load instruction) may be not be initiated until the prior read is completed because the prior load instruction provides the address for the next load instruction. Compute nodes in these systems issue requests to memory nodes that can require multiple round trips to one or more memory nodes, incurring large latency overhead. Pointer chasing is a high-latency operation because of the interdependency between load instructions and can result in large performance degradation in systems with multiple memory nodes, and even in systems that have a single memory node.